aboutsummaryrefslogtreecommitdiff
path: root/src/routes/projects/[projectId]/routine/[routineId]/+page.svelte
diff options
context:
space:
mode:
authorMartin Kagamino Lehoux <martin@lehoux.net>2026-09-08 17:06:51 +0200
committerMartin Kagamino Lehoux <martin@lehoux.net>2026-09-08 17:06:51 +0200
commitbd2f982c489b15ce1165c051fdedf35af979f784 (patch)
tree5c76d07f94b34f6b7b31be6a133793b2cdaccd79 /src/routes/projects/[projectId]/routine/[routineId]/+page.svelte
parent6d69c7b1e6a8051338e052cc9d1836f4f1a20f51 (diff)
Migrate date handling from Date to Temporal API
Routine scheduling, health series, service stamps, session expiry, and date formatting move to native Temporal (Instant / ZonedDateTime in UTC), with ISO strings kept at DB and chart boundaries. Ambient types in src/temporal-ambient.d.ts cover the native runtime; no polyfill. Observable behavior and stored formats are unchanged.
Diffstat (limited to 'src/routes/projects/[projectId]/routine/[routineId]/+page.svelte')
-rw-r--r--src/routes/projects/[projectId]/routine/[routineId]/+page.svelte28
1 files changed, 11 insertions, 17 deletions
diff --git a/src/routes/projects/[projectId]/routine/[routineId]/+page.svelte b/src/routes/projects/[projectId]/routine/[routineId]/+page.svelte
index ab2644d..e593ad1 100644
--- a/src/routes/projects/[projectId]/routine/[routineId]/+page.svelte
+++ b/src/routes/projects/[projectId]/routine/[routineId]/+page.svelte
@@ -8,6 +8,7 @@
parseIntervalToDays,
computeHealthSeries,
} from '$lib/shared/routine-metrics';
+ import { formatDayMonth, formatDayMonthYear } from '$lib/shared/temporal';
let { data, form } = $props();
let name = $state('');
let frequency = $state('');
@@ -27,24 +28,19 @@
}
});
const frequencyDays = $derived(parseIntervalToDays(frequency));
- const dateFormatter = new Intl.DateTimeFormat('fr-FR', {
- day: 'numeric',
- month: 'short',
- });
- const dateTimeFormatter = new Intl.DateTimeFormat('fr-FR', {
- day: 'numeric',
- month: 'short',
- year: 'numeric',
- });
const frozenAt = $derived(
data.routine.archived
- ? Date.parse(data.routine.archivedAt ?? data.routine.createdAt)
- : Date.now(),
+ ? Temporal.Instant.from(data.routine.archivedAt ?? data.routine.createdAt)
+ : Temporal.Now.instant(),
);
const series = $derived(
computeHealthSeries(data.routine, data.completions, frozenAt),
);
- const markers = $derived(data.completions.map((c) => Date.parse(c.doneAt)));
+ const markers = $derived(
+ data.completions.map(
+ (c) => Temporal.Instant.from(c.doneAt).epochMilliseconds,
+ ),
+ );
</script>
<main>
@@ -60,9 +56,7 @@
{#if data.routine.archived}
<p class="archived-badge">
Archivée le
- {dateTimeFormatter.format(
- new Date(data.routine.archivedAt ?? data.routine.createdAt),
- )}
+ {formatDayMonthYear(data.routine.archivedAt ?? data.routine.createdAt)}
</p>
{/if}
@@ -144,7 +138,7 @@
<span class="chart-meta">
{formatFrequency(data.routine.frequencyDays)}
{#if data.state.lastDoneAt}
- · fait le {dateFormatter.format(new Date(data.state.lastDoneAt))}
+ · fait le {formatDayMonth(data.state.lastDoneAt)}
{:else}
· jamais fait
{/if}
@@ -182,7 +176,7 @@
{#each data.completions as c (c.id)}
<li class="item-row item-row--card completion-row">
<span class="completion-date">
- {dateTimeFormatter.format(new Date(c.doneAt))}
+ {formatDayMonthYear(c.doneAt)}
</span>
{#if c.note}
<span class="completion-note">{c.note}</span>